<?php
/**
* 自定义微信接口权限类
*
* @author ming  2016/8/2
*/

class  mingWxOauth{
   private  $appid='wx88fa22fd33b3c46d';
   private  $secret='b90cd45bcde86e0ad539c0ead868155e';
   private  $redirectUri;
   private  $openIdOnly=1; 
   public  function  __construct($flag=0,$back_url,$param){
	   
	   
	   if(!($flag>5)){
		 if(empty($_GET['code'])||!isset($_GET['code'])) {
		   $this->getCode($flag,$back_url,$param);
		   header('Location:'.$this->oAuthUrl);
		 }else{
		   $this->code=$_GET['code'];
		 }       } 
   }


   /**
	 * 获取code
	 * @desc 第三方发起授权，客户同意，微信拉起应用或定向到第三方网站，并且带上授权临时票据code参数。
	 * @param string appid 开发者APPID
	 * @param string redirectUri 第三方URL,即授权后跳转的URL
	 * @param bool openIdOnly 是否只获取openid，true时，不会弹出授权页面，但只能获取用户的openid，而false时，弹出授权页面，可以通过openid获取用户信息  , 授权作用域 ,具体看文档
	 * @param state 这个是自定义的<128字节,具体看官网说明
	 * @return url
	 */
	 
	public function getCode($flag=0,$back_url,$param){

		//$this->state=$this->state?$this->state:'ming'.mt_rand(5,63);
	    $this->state=$param;
		$this->scope=$this->openIdOnly?'snsapi_userinfo':'snsapi_base';
		
      //  $this->redirectUri=$flag>0?'http://star.39miao.net/index.php/DemandCenter/index':'http://star.39miao.net/index.php/Demand/index';	
		$this->redirectUri=C('WEB_SITE').$back_url;
		
		//file_put_contents('xiaoxiao.log', $back_url);
		
	  //  if($flag>5) $this->redirectUri='http://star.39miao.net/index.php/Subcribe/index/t_id/'.($flag/10);

		$oAuthUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".urlencode($this->redirectUri)."&response_type=code&scope=".$this->scope."&state=".$this->state."#wechat_redirect";
	     
		 $this->oAuthUrl=$oAuthUrl;
	}	

   /**
	 * 根据code获取access_token+openid
	 * @desc 通过code参数加上AppID和AppSecret等，通过API换取access_token
	 * @param string appid 开发者APPID
	 * @param string secret 应用密钥
	 * @param string code  腾讯服务器返回的code，code作为换取access_token的票据，每次用户授权带上的code将不一样，code只能使用一次，5分钟未被使用自动过期。
	 * @return array
	 */
	 
  public function getAccessToken(){
 
  	    
  	
		$get_token_url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->secret."&code=".$this->code."&grant_type=authorization_code";
	
		$json_to_arr=json_decode($this->cURL($get_token_url),true);
	   
		$this->web_access_token=$json_to_arr['access_token'];

		$this->openid=$json_to_arr['openid'];


	
	}


 /**
   *
   *获取全局access_token
   */
  public function get_access_token(){
  
    $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->secret;

    

	$res=$this->cURL($url);

    $result=json_decode($res,true);

  
    $this->access_token=$result['access_token'];


 
  
  }
 
   /**
    * 获取用户基本信息 网页授权版，不能获取用户是否关注
    * @param url 第三方地址
    * @return array
    */

  public   function WebgetWxUserInfo(){
  	
      $this->getAccessToken();

      $get_user_info_url="https://api.weixin.qq.com/sns/userinfo?access_token=".$this->web_access_token."&openid=".$this->openid."&lang=zh_CN"; //此处的access_token和openid来自getAccessToken方法返回的数组
   	
   //	$this->get_access_token();

    //$get_user_info_url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$this->openid."&lang=zh_CN";

    $usr_info=json_decode($this->cURL($get_user_info_url), true);
   	
    return $usr_info;

   	
   }

     /**
    * 获取用户基本信息 ，全局access_token   获取用户是否关注
    * @param url 第三方地址
    * @return array
    */

  public   function getWxUserInfo(){
  	
    $this->get_access_token();//获取全局access_token

    $this->getAccessToken(); //获取openid

    $get_user_info_url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$this->openid."&lang=zh_CN";

    $usr_info=json_decode($this->cURL($get_user_info_url), true);
   	
    return $usr_info;

   	
   }


   
   /**
    *
    *发送模板信息
    */
   public function send_tpl_msg($data){
   	
   	$url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$this->access_token;
   
   	$res=$this->cURL($url,$data);
   // file_put_contents('wwwwwwwwww.log',json_decode($res,true));
   	return json_decode($res,true);
   	 
   }

  
   
   /**
    *
    * curl 操作
    *
	* 支持GET和POST
    * @return json object
    */  
   public function cURL($url,$data=null){
		$ch=curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, 0);
	    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        
		if(!empty($data))
		{
		  curl_setopt($ch, CURLOPT_POST,1);
		  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
		}
     
		$res=curl_exec($ch);
		curl_close($ch);
		return $res;
	  }
 
}


